package com.xmg.design23.d17_state;

/**
 * 状态（State）模式的定义：对有状态的对象，把复杂的“判断逻辑”提取到不同的状态对象中，
 * 允许状态对象在其内部状态发生改变时改变其行为。
 * 状态模式一般用来实现状态机，而状态机常用在游戏、工作流引擎等系统开发中。状态机又叫有限状态机，
 * 它由3个部分组成：状态、事件、动作。其中，事件也称为转移条件。事件触发状态的转移及动作的执行。
 * 不过，动作不是必须的，也可能只转移状态，不执行任何动作。
 * 针对状态机，我们总结了三种实现方式。
 *
 * 第一种实现方式叫分支逻辑法。利用if-else或者switch-case分支逻辑，参照状态转移图，将每一个状态转移原模原样地直译成代码。
 * 对于简单的状态机来说，这种实现方式最简单、最直接，是首选。
 *
 * 第二种实现方式叫查表法。对于状态很多、状态转移比较复杂的状态机来说，查表法比较合适。通过二维数组来表示状态转移图，
 * 能极大地提高代码的可读性和可维护性。
 *
 * 第三种实现方式就是利用状态模式。对于状态并不多、状态转移也比较简单，
 * 但事件触发执行的动作包含的业务逻辑可能比较复杂的状态机来说，我们首选这种实现方式。
 *
 * 作者：编程指北
 * 链接：https://www.zhihu.com/question/308850392/answer/1698535006
 * 来源：知乎
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @Author: mazhongqing
 * @Date: 2021/3/24 18:02
 */
public class Test {
    public static void main(String[] args) {
        Context context = new Context();
        context.Handle();
        context.Handle();
        context.Handle();
        context.Handle();
    }
}
